Data processors known as digital signal processors (DSPs) have been used with increasing frequency in such applications as communications, control, instrumentation, and digital audio. A DSP is a special type of data processor which is designed to efficiently process a data stream in real time. One example is a fast fourier transform (FFT), in which a real-time signal is converted into a representation in the frequency domain for processing such as filtering. Once the filtering is accomplished, the signal is returned to the time domain. DSPs are computation-intensive data processors, and thus must be able to perform certain arithmetic operations efficiently.
One way to accomplish fast arithmetic manipulation of data is for the DSP to access two separate operands independently via two separate data paths. See, for example, "A Digital Signal Processor with IEEE Floating-Point Arithmetic" by Sohie, G. and Kloker, K., IEEE Micro, vol. 8, no. 6, December 1988, pp. 49-67. The data accessed through the two data paths may be in physically distinct memory systems, but more typically is located within the same memory system. A DSP may perform a multiply operation by fetching one operand through the first data path, and the other operand from the second data path. An assembly code mnemonic for such an operation may read "mpy (r0)*(r1)", where r0 and r1 are pointers to data to be accessed from the first and second data paths, respectively, as the two operands of the multiply operation.
Computational algorithms for digital signal processing often involve squaring of operands, that is, multiplying an operand by itself. To maximize the speed of the square operation, it is desirable to fetch one operand from each data path. The mnemonic for such an operation may read "mpy (r0)*(r0)", where r0 is the pointer to the operand to be squared. However, if the first and second data paths are implemented in the same physical memory, such an operation presents a problem. The square operation "mpy (r0)*(r0)" takes multiple cycles because the same data must be fetched twice out of the same memory location and provided to two different data paths.